
const 和 let 的异同点 <br/>
相同点： const 和 let 都是在当前块内有效，执行到块会被销毁，也不存在变量提升（TDZ）,都不能 重复声明。<br/>
不同点： const 不能在赋值， let声明的变量可以重复赋值。<br/>
<hr/>
var 需要注意的地方<br/>

<script>
	// 1，首先 a 一定在这个函数体里声明了，所以在if 上面输出 a 浏览器没有报错
	// 2，即使是 条件 是 false  也不影响a 变量提升
	function varTest() {
		console.log('1', a) // undefined
		if(false) {
			var a = 1;
		}
		console.log('3', a) // undefined
	}
	varTest()
	
</script>

let 需要注意的地方<br/>
<script>
	// 俗称临时死区, let 有块级作用域概念
	function test() {
		if(true) {
			console.log('c', c)
			let c = 1;
		}
		console.log('c2', c)
	}
	// test()
	
</script>

const 需要注意的地方<br/>
<script>
	// 常量错误第一种：常量一旦声明，不可更改，常量必须初始化赋值 const 
	// const type = 'TYPE';
	//       type = 1
	//       console.log('type',type) // Assignment to constant variable   翻译：赋值给常量变量
	
	// 常量错误第二种：声明的是 常量，赋值是 {}，[] 里面的值 增删是可以的，定义的数据结构内存地址发生变化，是不可行
	const typeJosn = {
		a : 1
	}
	typeJosn.a = 2
	console.log('typeJosn.a', typeJosn.a) // 2

    const type2 = {}
          type2 = [] // Assignment to constant variable.  翻译：赋值给常量变量

</script>

什么是 “临时死区”（TDZ）<br/>
<script>
	if(true) {
       // 这块区域是 “临时死区”（TDZ）,在这里是拿不到 a 的变量的。
       let a = 1;
	}
</script>




